package com.hsurosy.hsuchain.nft.sms.config;

import com.hsurosy.hsuchain.nft.sms.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

/**
 * 短信服务配置类
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 5:04
 * @Description
 * @Version: v1.0.0
 */
@Configuration
@EnableConfigurationProperties(SmsProperties.class)
public class SmsConfiguration {

    /**
     * 自动注入SmsProperties，用于获取短信服务相关配置。
     */
    @Autowired
    private SmsProperties properties;

    /**
     * 配置真实的短信服务实现。
     * 当配置文件中sms.enabled设置为true，并且运行环境为"default"或"prod"时，使用此配置。
     *
     * @return SmsService 实际的短信服务实现
     */
    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = SmsProperties.PREFIX, value = "enabled", havingValue = "true")
    @Profile({"default", "prod"})
    public SmsService smsService() {
        // 创建SmsServiceImpl实例，并设置相关属性
        SmsServiceImpl smsService = new SmsServiceImpl();
        smsService.setHost(properties.getHost());
        smsService.setPath(properties.getPath());
        smsService.setAppcode(properties.getAppcode());
        smsService.setSmsSignId(properties.getSmsSignId());
        smsService.setTemplateId(properties.getTemplateId());
        return smsService;
    }

    /**
     * 配置Mock短信服务实现。
     * 当运行环境为"dev"或"test"时，使用MockSmsServiceImpl替代实际的短信服务。
     *
     * @return SmsService Mock短信服务实现
     */
    @Bean
    @ConditionalOnMissingBean
    @Profile({"dev", "test"})
    public SmsService mockSmsService() {
        // 返回Mock短信服务的实现，用于开发和测试环境
        return new MockSmsServiceImpl();
    }
}
